function _typeof(t) {
    return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
        return typeof t;
    } : function(t) {
        return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;
    })(t);
}

!function(t) {
    var u, r = Object.prototype, f = r.hasOwnProperty, e = "function" == typeof Symbol ? Symbol : {}, o = e.iterator || "@@iterator", n = e.asyncIterator || "@@asyncIterator", i = e.toStringTag || "@@toStringTag", a = "object" === ("undefined" == typeof module ? "undefined" : _typeof(module)), c = t.regeneratorRuntime;
    if (c) a && (module.exports = c); else {
        (c = t.regeneratorRuntime = a ? module.exports : {}).wrap = w;
        var s = "suspendedStart", l = "suspendedYield", p = "executing", y = "completed", d = {}, h = {};
        h[o] = function() {
            return this;
        };
        var v = Object.getPrototypeOf, m = v && v(v(N([])));
        m && m !== r && f.call(m, o) && (h = m);
        var g = E.prototype = x.prototype = Object.create(h);
        b.prototype = g.constructor = E, E.constructor = b, E[i] = b.displayName = "GeneratorFunction", 
        c.isGeneratorFunction = function(t) {
            var r = "function" == typeof t && t.constructor;
            return !!r && (r === b || "GeneratorFunction" === (r.displayName || r.name));
        }, c.mark = function(t) {
            return Object.setPrototypeOf ? Object.setPrototypeOf(t, E) : (t.__proto__ = E, i in t || (t[i] = "GeneratorFunction")), 
            t.prototype = Object.create(g), t;
        }, c.awrap = function(t) {
            return {
                __await: t
            };
        }, _(j.prototype), j.prototype[n] = function() {
            return this;
        }, c.AsyncIterator = j, c.async = function(t, r, e, n) {
            var o = new j(w(t, r, e, n));
            return c.isGeneratorFunction(r) ? o : o.next().then(function(t) {
                return t.done ? t.value : o.next();
            });
        }, _(g), g[i] = "Generator", g[o] = function() {
            return this;
        }, g.toString = function() {
            return "[object Generator]";
        }, c.keys = function(e) {
            var n = [];
            for (var t in e) n.push(t);
            return n.reverse(), function t() {
                for (;n.length; ) {
                    var r = n.pop();
                    if (r in e) return t.value = r, t.done = !1, t;
                }
                return t.done = !0, t;
            };
        }, c.values = N, G.prototype = {
            constructor: G,
            reset: function(t) {
                if (this.prev = 0, this.next = 0, this.sent = this._sent = u, this.done = !1, this.delegate = null, 
                this.method = "next", this.arg = u, this.tryEntries.forEach(k), !t) for (var r in this) "t" === r.charAt(0) && f.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = u);
            },
            stop: function() {
                this.done = !0;
                var t = this.tryEntries[0].completion;
                if ("throw" === t.type) throw t.arg;
                return this.rval;
            },
            dispatchException: function(e) {
                if (this.done) throw e;
                var n = this;
                function t(t, r) {
                    return i.type = "throw", i.arg = e, n.next = t, r && (n.method = "next", n.arg = u), 
                    !!r;
                }
                for (var r = this.tryEntries.length - 1; 0 <= r; --r) {
                    var o = this.tryEntries[r], i = o.completion;
                    if ("root" === o.tryLoc) return t("end");
                    if (o.tryLoc <= this.prev) {
                        var a = f.call(o, "catchLoc"), c = f.call(o, "finallyLoc");
                        if (a && c) {
                            if (this.prev < o.catchLoc) return t(o.catchLoc, !0);
                            if (this.prev < o.finallyLoc) return t(o.finallyLoc);
                        } else if (a) {
                            if (this.prev < o.catchLoc) return t(o.catchLoc, !0);
                        } else {
                            if (!c) throw new Error("try statement without catch or finally");
                            if (this.prev < o.finallyLoc) return t(o.finallyLoc);
                        }
                    }
                }
            },
            abrupt: function(t, r) {
                for (var e = this.tryEntries.length - 1; 0 <= e; --e) {
                    var n = this.tryEntries[e];
                    if (n.tryLoc <= this.prev && f.call(n, "finallyLoc") && this.prev < n.finallyLoc) {
                        var o = n;
                        break;
                    }
                }
                o && ("break" === t || "continue" === t) && o.tryLoc <= r && r <= o.finallyLoc && (o = null);
                var i = o ? o.completion : {};
                return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o.finallyLoc, 
                d) : this.complete(i);
            },
            complete: function(t, r) {
                if ("throw" === t.type) throw t.arg;
                return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, 
                this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), 
                d;
            },
            finish: function(t) {
                for (var r = this.tryEntries.length - 1; 0 <= r; --r) {
                    var e = this.tryEntries[r];
                    if (e.finallyLoc === t) return this.complete(e.completion, e.afterLoc), k(e), d;
                }
            },
            catch: function(t) {
                for (var r = this.tryEntries.length - 1; 0 <= r; --r) {
                    var e = this.tryEntries[r];
                    if (e.tryLoc === t) {
                        var n = e.completion;
                        if ("throw" === n.type) {
                            var o = n.arg;
                            k(e);
                        }
                        return o;
                    }
                }
                throw new Error("illegal catch attempt");
            },
            delegateYield: function(t, r, e) {
                return this.delegate = {
                    iterator: N(t),
                    resultName: r,
                    nextLoc: e
                }, "next" === this.method && (this.arg = u), d;
            }
        };
    }
    function w(t, r, e, n) {
        var i, a, c, u, o = r && r.prototype instanceof x ? r : x, f = Object.create(o.prototype), h = new G(n || []);
        return f._invoke = (i = t, a = e, c = h, u = s, function(t, r) {
            if (u === p) throw new Error("Generator is already running");
            if (u === y) {
                if ("throw" === t) throw r;
                return P();
            }
            for (c.method = t, c.arg = r; ;) {
                var e = c.delegate;
                if (e) {
                    var n = O(e, c);
                    if (n) {
                        if (n === d) continue;
                        return n;
                    }
                }
                if ("next" === c.method) c.sent = c._sent = c.arg; else if ("throw" === c.method) {
                    if (u === s) throw u = y, c.arg;
                    c.dispatchException(c.arg);
                } else "return" === c.method && c.abrupt("return", c.arg);
                u = p;
                var o = L(i, a, c);
                if ("normal" === o.type) {
                    if (u = c.done ? y : l, o.arg === d) continue;
                    return {
                        value: o.arg,
                        done: c.done
                    };
                }
                "throw" === o.type && (u = y, c.method = "throw", c.arg = o.arg);
            }
        }), f;
    }
    function L(t, r, e) {
        try {
            return {
                type: "normal",
                arg: t.call(r, e)
            };
        } catch (t) {
            return {
                type: "throw",
                arg: t
            };
        }
    }
    function x() {}
    function b() {}
    function E() {}
    function _(t) {
        [ "next", "throw", "return" ].forEach(function(r) {
            t[r] = function(t) {
                return this._invoke(r, t);
            };
        });
    }
    function j(u) {
        var r;
        this._invoke = function(e, n) {
            function t() {
                return new Promise(function(t, r) {
                    !function r(t, e, n, o) {
                        var i = L(u[t], u, e);
                        if ("throw" !== i.type) {
                            var a = i.arg, c = a.value;
                            return c && "object" === _typeof(c) && f.call(c, "__await") ? Promise.resolve(c.__await).then(function(t) {
                                r("next", t, n, o);
                            }, function(t) {
                                r("throw", t, n, o);
                            }) : Promise.resolve(c).then(function(t) {
                                a.value = t, n(a);
                            }, o);
                        }
                        o(i.arg);
                    }(e, n, t, r);
                });
            }
            return r = r ? r.then(t, t) : t();
        };
    }
    function O(t, r) {
        var e = t.iterator[r.method];
        if (e === u) {
            if (r.delegate = null, "throw" === r.method) {
                if (t.iterator.return && (r.method = "return", r.arg = u, O(t, r), "throw" === r.method)) return d;
                r.method = "throw", r.arg = new TypeError("The iterator does not provide a 'throw' method");
            }
            return d;
        }
        var n = L(e, t.iterator, r.arg);
        if ("throw" === n.type) return r.method = "throw", r.arg = n.arg, r.delegate = null, 
        d;
        var o = n.arg;
        return o ? o.done ? (r[t.resultName] = o.value, r.next = t.nextLoc, "return" !== r.method && (r.method = "next", 
        r.arg = u), r.delegate = null, d) : o : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), 
        r.delegate = null, d);
    }
    function S(t) {
        var r = {
            tryLoc: t[0]
        };
        1 in t && (r.catchLoc = t[1]), 2 in t && (r.finallyLoc = t[2], r.afterLoc = t[3]), 
        this.tryEntries.push(r);
    }
    function k(t) {
        var r = t.completion || {};
        r.type = "normal", delete r.arg, t.completion = r;
    }
    function G(t) {
        this.tryEntries = [ {
            tryLoc: "root"
        } ], t.forEach(S, this), this.reset(!0);
    }
    function N(r) {
        if (r) {
            var t = r[o];
            if (t) return t.call(r);
            if ("function" == typeof r.next) return r;
            if (!isNaN(r.length)) {
                var e = -1, n = function t() {
                    for (;++e < r.length; ) if (f.call(r, e)) return t.value = r[e], t.done = !1, t;
                    return t.value = u, t.done = !0, t;
                };
                return n.next = n;
            }
        }
        return {
            next: P
        };
    }
    function P() {
        return {
            value: u,
            done: !0
        };
    }
}(function() {
    return this;
}() || Function("return this")());